原帖 | Jason | 2026-03-12 11:15 | 👍0 | 阅读约1
Linux 调试手段,涵盖 printk 使用、动态打印、trace 使用、查看调用栈、读写内存、Coredump、Watchpoint、KASAN 等内容。
-
printk 与打印等级:Linux 内核开发者常用 printk 调试,它与 printf 类似但提供输出等级,内核有 8 个输出等级,默认等级通常为 4,可在开发和发布阶段调整,还能通过多种方式修改等级,内核也对 printk 进行了封装,pr_debug 有三种情况。
-
动态打印:使用动态输出可在不重新编译内核的情况下打印 debug 信息,需开启 CONFIG_DYNAMIC_DEBUG,依赖 CONFIG_DEBUG_FS,还需挂载 debugfs 文件系统,可按文件、模块、函数等开启动态输出。
-
ftrace:是其他 trace 的基础,使用前需确保内核编译相关配置选项,/sys/kernel/debug/trace 目录下有多种跟踪器和事件,常用跟踪器有 nop、function 等。
-
BUG_ON/WARN_ON:BUG_ON 满足条件会触发 BUG 使系统宕机,WARN_ON 不会触发 panic 但会输出调用栈信息。
-
dump_stack:用于打印函数调用关系,打印信息需从下往上看。
-
devmem:可直接读写寄存器,依赖 /dev/mem 设备节点,需开启内核配置,给出命令格式和使用示例。
-
Coredump 解析:属于高级 debug 技巧,依赖芯片原厂实现。异常时会生成文件记录 log,记录问题现场寄存器值,记录 bus 状态,DB 文件等。 后续配合符号文件可以解析出来 debug 信息。
相关笔记
- 📁 返回本主题 MOC
- Linux BSP问题闭环流程
- 从MCU转Linux BSP开发
- Linux编译视角调试方法
- 很多刚接触 Linux : Android 的同学
- DDR替换后内核崩溃排查
- 嵌入式Linux调试iic